﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using CoVanHocTapProject.Extends;
using CoVanHocTapData.Entities;
using CoVanHocTapData.Concretes;
using CoVanHocTapProject.Infrastructure;
using CoVanHocTapData.Interface;
using System.Data;

namespace CoVanHocTapProject.Controllers
{
    public class KeHoachHocTapController : Controller
    {
        #region repos
        IMonHocRepository mHocRepos = new MonHocRepository();
        IMonHocDangKyRepository mHocDangKyRepos = new MonHocDangKyRepository();
        IMonDuKienMoRepository mHocDuKienMoRepos = new MonDuKienMoRepository();
        ISinhVienMonDuKienMoRepository sinhVienMonDuKienMoRepos = new SinhVienMonDuKienMoRepository();
        ISinhVien_TichLuyRepository sinhVienTichLuyRepos = new SinhVien_TichLuyRepositpry();
        IKetQuaHocRepository ketQuaHocRepos = new KetQuaHocRepository();
        IThangDiemDanhGiaRepository thangDiemDanhGiaRepos = new ThangDiemDanhGiaRepository();
        ISinhVien_TichLuyKhoiRepository svtlKhoiRepos = new SinhVien_TichLuyKhoiRepository();
        #endregion

        //
        // GET: /KeHoachHocTap/
        public KeHoachHocTapController()
        {
            //list = new MonHocDangKy();
        }
        public static MonHocDangKy list = new MonHocDangKy(); //ds mh cho sv dang ky ke hoach hoc tap
        static float soTCSVDangKy = 0;
        public ActionResult Index()
        {
            if (Publics.sinhVienDangNhap != null)
            {
                SinhVien sv = Publics.sinhVienDangNhap;
                int HocKyID = Publics.hocKyHienTai.HocKyID;
                string errorMonHocKhongDuocDangKy = "";
                if (list != null)
                {
                    errorMonHocKhongDuocDangKy = list.MonHocKhongDuocDangKy;
                }

                list = mHocDangKyRepos.LayMonHocDangKyKHHT(Publics.sinhVienDangNhap.MSSV, Publics.hocKyHienTai.HocKyID);
                list.MonHocKhongDuocDangKy = errorMonHocKhongDuocDangKy;
                if (doKhoMonHoc != "")
                {
                    list.DoKhoMonHoc = doKhoMonHoc;
                    doKhoMonHoc = "";
                }

                if (list.DSMonHocRangBuocSVNenDKy != null || list.DSMonHocRangBuocSVNenDKy.Count > 0)
                {
                    list.ViewStickMHNenDangKy = "$(document).ready(function showStickyErrorToast() { $().toastmessage('showToast', {text: '";
                    list.ViewStickMHNenDangKy += "<b ><span style=\"color:lime\">Danh sách môn học SV nên đăng ký</span></b><br />";
                    list.ViewStickMHNenDangKy += "<li><span style=\"color:yellow\"><b>Môn học có ràng buộc(trước, tiên quyết) mà SV phải ưu tiên đăng ký</span></b></li>";
                    int stt = 1;
                    foreach (var rbNenDangKyItem in list.DSMonHocRangBuocSVNenDKy)
                    {
                        list.ViewStickMHNenDangKy += stt.ToString() + ". " + rbNenDangKyItem.TenMonHoc + " - " + rbNenDangKyItem.MonHocID + "<br/>";
                        stt++;
                    }

                }


                if (list.DsMonHocSVNenDKy != null || list.DsMonHocSVNenDKy.Count > 0)
                {
                    list.ViewStickMHNenDangKy += "<li ><span style=\"color:yellow\"><b>Môn học bắt buộc(SV có thể đăng ký sau)</b></span></li>";
                    int stt = 1;
                    foreach (var viewStick in list.DsMonHocSVNenDKy)
                    {
                        list.ViewStickMHNenDangKy += stt.ToString() + ". " + viewStick.TenMonHoc + " - " + viewStick.MonHocID + "<br/>";
                        stt++;
                    }
                    list.ViewStickMHNenDangKy += "',  sticky: true, position: 'top-right', type: 'notice', closeText: '', close: function () {  console.log('...');  } });});";
                }

                //if (VuotToiDaKhiCongThem)
                //{
                //    if (list.ShowDialogError)
                //        return View(list);
                //}

                if (list.MonHocKhongDuocDangKy != "" && list.MonHocKhongDuocDangKy != null)
                    return View(list);

                SinhVien_TichLuy result = new SinhVien_TichLuy();
                result = sinhVienTichLuyRepos.LaySinhVienTichLuy(Publics.sinhVienDangNhap.MSSV, Publics.sinhVienDangNhap.Lop.NganhID, Publics.sinhVienDangNhap.Lop.HeDaoTaoID, Publics.hocKyHienTai.HocKyID).FirstOrDefault();
                ThangDiemDanhGia thangDiem = new ThangDiemDanhGia();
                if (result != null)
                {
                    thangDiem = thangDiemDanhGiaRepos.LayThangDiemDanhGia(float.Parse(result.TrungBinhTichLuy.Value.ToString())).FirstOrDefault();
                    float TCDangKy = 0;
                    foreach (var item in list.MonHocSVDangKy)
                        TCDangKy += item.SoDVHocTap.Value;
                    if (TCDangKy >= thangDiem.SoTCToiThieu && TCDangKy <= thangDiem.SoTCToiDa.Value)
                    {
                        list.ShowDialogError = false;
                        list.MonHocKhongDuocDangKy = "";
                        list.ErrorDangKySoLuongVuotToiDa = "";
                    }
                    else
                    {

                        string ErrorDangKySoLuongVuotToiDa = "";
                        string ErrorDangKySoLuongThapToiThieu = "";


                        if (TCDangKy > thangDiem.SoTCToiDa.Value)
                        {
                            ErrorDangKySoLuongVuotToiDa += "Vì điểm trung bình tích lũy của sinh viên " + Publics.sinhVienDangNhap.MSSV + " thuộc diện học lực " + thangDiem.XepLoai.ToLower() + ". <br/>\tDo đó sinh viên ";
                            ErrorDangKySoLuongVuotToiDa += "không được đăng ký vượt quá " + thangDiem.SoTCToiDa.Value + " tín chỉ. <br/>\tHiện tại sinh viên đã đăng ký vượt quá " + (TCDangKy - thangDiem.SoTCToiDa.Value) + " tín chỉ.<br/>\tDo đó, sinh viên phải bỏ bớt môn học cho đủ tín chỉ quy định!";
                            ErrorDangKySoLuongThapToiThieu = "";
                        }
                        if (TCDangKy < thangDiem.SoTCToiThieu.Value || list.MonHocSVDangKy.Count == 0)
                        {
                            ErrorDangKySoLuongThapToiThieu += "Vì điểm trung bình tích lũy của sinh viên " + Publics.sinhVienDangNhap.MSSV + " thuộc diện học lực " + thangDiem.XepLoai.ToLower() + ". <br/>\tDo đó sinh viên ";
                            ErrorDangKySoLuongThapToiThieu += "phải đăng ký tối thiểu " + thangDiem.SoTCToiThieu.Value + " tín chỉ. <br/>\tHiện tại sinh viên đã đăng ký thiếu " + (thangDiem.SoTCToiThieu.Value - TCDangKy) + " tín chỉ.<br/>\tDo đó, sinh viên phải đăng ký thêm môn học cho đủ tín chỉ!";
                            ErrorDangKySoLuongVuotToiDa = "";
                        }
                        if (ErrorDangKySoLuongThapToiThieu != "")
                            list.MonHocKhongDuocDangKy = "$(document).ready(function showStickyErrorToast() { $().toastmessage('showToast', {text: '" + ErrorDangKySoLuongThapToiThieu + "',  sticky: true, position: 'middle-center', type: 'error', closeText: '', close: function () {  console.log('toast is closed ...');  } });});";
                        else if (ErrorDangKySoLuongVuotToiDa != "")
                            list.MonHocKhongDuocDangKy = "$(document).ready(function showStickyErrorToast() { $().toastmessage('showToast', {text: '" + ErrorDangKySoLuongVuotToiDa + "',  sticky: true, position: 'middle-center', type: 'error', closeText: '', close: function () {  console.log('toast is closed ...');  } });});";
                    }
                }

                return View(list);
            }
            return RedirectToAction("Index", "TrangChu");
        }



        //List<MonHoc> monHocIDDangKyList =new List<MonHoc>();
        static bool VuotToiDaKhiCongThem = false; //khi cong them so tin chi cua mon hoc moi them thi vuot qua so tin chi toi da
        static List<SinhVien_TichLuyKhoi> DSSVTichLuyKhoiTheoMonHoc;// = svtlTheoKhoiRepos.LayDsSVTLTheoKhoi(dsKhoiTheoMonHoc.FirstOrDefault().KhoiChuongTrinhDaoTaoID, Publics.hocKyHienTai.HocKyID).ToList();
        static string doKhoMonHoc = "";

        public ActionResult DangKy(string id)
        {
            if (Publics.sinhVienDangNhap == null)
                return RedirectToAction("Index", "TrangChu");
            SinhVien SVDangNhap = Publics.sinhVienDangNhap;
            long monDuKienMoID = mHocDuKienMoRepos.LayMonDuKienMo(id, Publics.hocKyHienTai.HocKyID).FirstOrDefault().MonDuKienMoID;

            //cvht kiem tra sv co duoc dky mhoc hay ko
            //kiem tra dtb de sv dky toi thieu, toi da bao nhieu tin chi
            SinhVien_TichLuy result = new SinhVien_TichLuy();
            if (!sinhVienTichLuyRepos.KiemTraSinhVienTichLuy(SVDangNhap.MSSV, SVDangNhap.Lop.NganhID, SVDangNhap.Lop.HeDaoTaoID, Publics.hocKyHienTai.HocKyID))
            {
                sinhVienTichLuyRepos.ThemSinhVienTichLuy(SVDangNhap, SVDangNhap.Lop.NganhID, SVDangNhap.Lop.HeDaoTaoID, Publics.hocKyHienTai.HocKyID);
            }
            result = sinhVienTichLuyRepos.LaySinhVienTichLuy(SVDangNhap.MSSV, SVDangNhap.Lop.NganhID, SVDangNhap.Lop.HeDaoTaoID, Publics.hocKyHienTai.HocKyID).FirstOrDefault();
            int index = 0;
            for (int i = 0; i < list.MonHocCTDT.Count; i++)
            {
                if (list.MonHocCTDT[i].MonHocID.Equals(id))
                {
                    index = i;
                    break;
                }
            }

            if (!list.MonHocCTDT[index].DuocDangKy)
            {
                list.MonHocKhongDuocDangKy = "$(document).ready(function showStickyErrorToast() { $().toastmessage('showToast', {text: 'Không được đăng ký môn học " + list.MonHocCTDT[index].MonHocID + " - " + list.MonHocCTDT[index].TenMonHoc + "',  sticky: true, position: 'middle-center', type: 'error', closeText: '', close: function () {  console.log('...');  } });});";
                list.ShowDialogError = true;
                return RedirectToAction("Index", "KeHoachHocTap");
            }
            else
            {

                //monHocIDDangKyList.Add(list.MonHocCTDT[index]);
                MonHoc monHocSVDangKy = list.MonHocCTDT[index];

                ThangDiemDanhGia thangDiem = thangDiemDanhGiaRepos.LayThangDiemDanhGia(float.Parse(result.TrungBinhTichLuy.Value.ToString())).FirstOrDefault();
                float soTCSVDangKy = 0;
                foreach (var monHocSVDangKyItem in list.MonHocSVDangKy)
                {
                    soTCSVDangKy += monHocSVDangKyItem.SoDVHocTap.Value;
                }
                if (soTCSVDangKy <= thangDiem.SoTCToiDa.Value) //so tc ma sv da dang ky
                {
                    soTCSVDangKy += monHocSVDangKy.SoDVHocTap.Value; //cong them mon hoc ma sv moi dky
                    if (soTCSVDangKy > thangDiem.SoTCToiDa.Value)
                    {
                        VuotToiDaKhiCongThem = true;
                        string ErrorDangKySoLuongVuotToiDa = "";
                        list.ShowDialogError = true;
                        ErrorDangKySoLuongVuotToiDa += "Vì điểm trung bình tích lũy của sinh viên " + Publics.sinhVienDangNhap.MSSV + " thuộc diện học lực " + thangDiem.XepLoai.ToLower() + ". <br/>\tDo đó sinh viên ";
                        ErrorDangKySoLuongVuotToiDa += "không được đăng ký vượt quá " + thangDiem.SoTCToiDa.Value + " tín chỉ. <br/>\tNếu sinh viên đăng ký môn học  " + list.MonHocCTDT[index].MonHocID + " - " + list.MonHocCTDT[index].TenMonHoc + " thì sẽ vượt mức số tín chỉ tối đa.<br/>\tDo đó, sinh viên không được đăng ký môn học này!";
                        list.MonHocKhongDuocDangKy = "$(document).ready(function showStickyErrorToast() { $().toastmessage('showToast', {text: ' " + ErrorDangKySoLuongVuotToiDa + "',  sticky: true, position: 'middle-center', type: 'error', closeText: '', close: function () {  console.log('');  } });});";
                        return RedirectToAction("Index");
                    }
                    VuotToiDaKhiCongThem = false;
                    //if(!sinhVienMonDuKienMoRepos.KiemTraSinhVienMonDuKienMo(SVDangNhap.MSSV,list.MonHocCTDT[index].MonHocID,Publics.hocKyHienTai.HocKyID))
                    list.ShowDialogError = false;
                    sinhVienMonDuKienMoRepos.ThemSinhVienMonDuKienMo(Publics.sinhVienDangNhap.MSSV, monDuKienMoID);
                    list.MonHocKhongDuocDangKy = "";


                }


            }

            return RedirectToAction("Index");

        }

        public ActionResult DanhGiaDoKho(string id)
        {
            SinhVien SVDangNhap = Publics.sinhVienDangNhap;
            //kiem tra do kho mon hoc
            //kiem tra mon hoc tuong duong vs id
            var monHocTuongDuongList = MonHocTuongDuongRepository.LayMonHocTuongDuong(id).Select(m => m.MonHocIDTuongDuong).ToList();

            if (id == "504008" || id == "502017" || id == "503012" || id == "503013" || id == "503006" || id == "502003" || id == "502002" ||
                monHocTuongDuongList.IndexOf("504008") != -1 || monHocTuongDuongList.IndexOf("502017") != -1
                || monHocTuongDuongList.IndexOf("503012") != -1 || monHocTuongDuongList.IndexOf("503013") != -1
                || monHocTuongDuongList.IndexOf("503006") != -1 || monHocTuongDuongList.IndexOf("502003") != -1
                || monHocTuongDuongList.IndexOf("502002") != -1)
            {
                int index = 0;
                for (int i = 0; i < list.MonHocCTDT.Count; i++)
                {
                    if (list.MonHocCTDT[i].MonHocID.Equals(id))
                    {
                        index = i;
                        break;
                    }
                }
                if (list.MonHocCTDT[index].MonHocID.Equals(id))
                {

                    DataTable table = new DataTable();
                    table.Columns.Add("MucDo");
                    table.Columns.Add("DTBTLTheoKhoi", typeof(double));
                    table.Columns.Add("DTBTLChung", typeof(double));
                    //training data.
                    //        if (DSSVTichLuyKhoiTheoMonHoc == null || DSSVTichLuyKhoiTheoMonHoc.Count == 0)
                    //     Publics.DSSVTichLuyKhoiTheoMonHoc = svtlKhoiRepos.LayDsSVTLTheoHocKy( Publics.hocKyHienTai.HocKyID).ToList();
                    {
                        #region do kho

                        //du lieu huan luyen dua vao mon hoc xet
                        //gia su mon hoc co ma mh la 504008
                        //lay lun nien khoa 2008 cho nhanh
                        IChiTietKhoiCTDTRepository chiTietKhoiCTDT = new ChiTietKhoiCTDTRepository();
                        ISinhVien_TichLuyKhoiRepository svtlTheoKhoiRepos = new SinhVien_TichLuyKhoiRepository();
                        ISinhVien_TichLuyRepository sv_TichLuyRepos = new SinhVien_TichLuyRepositpry();
                        IMonHocRepository monHocRepos = new MonHocRepository();
                        IMonHocTuongDuongRepository monHocTuongDuongRepos = new MonHocTuongDuongRepository();

                        var dsKhoiTheoMonHoc = chiTietKhoiCTDT.LayDsTheoKhoiCoSoTheoMaMonHoc(id, SVDangNhap.Lop.NganhID, 2008, SVDangNhap.Lop.HeDaoTaoID);
                        if (dsKhoiTheoMonHoc == null)
                        {

                            dsKhoiTheoMonHoc = chiTietKhoiCTDT.LayDsTheoKhoiCoSoTheoMaMonHoc(monHocTuongDuongList.FirstOrDefault(), SVDangNhap.Lop.NganhID, 2008, SVDangNhap.Lop.HeDaoTaoID);
                        }
                        DSSVTichLuyKhoiTheoMonHoc = svtlTheoKhoiRepos.LayDsSVTLTheoKhoi(dsKhoiTheoMonHoc.FirstOrDefault().KhoiChuongTrinhDaoTaoID, Publics.hocKyHienTai.HocKyID).ToList();

                        List<string> dsMonHocCungKhoi = new List<string>(); //ds mh cug khoi vs mon 504008

                        List<KetQuaHoc> dsKetQuaTheoKhoi = new List<KetQuaHoc>();
                        foreach (var chiTietKhoi in dsKhoiTheoMonHoc)
                        {
                            List<KetQuaHoc> dsKQDanhChoTuongDuong = new List<KetQuaHoc>();
                            KetQuaHoc KQTemp = ketQuaHocRepos.LayKetQuaHocTapCaoNhatTheoSVMonHoc(chiTietKhoi.MonHocID, SVDangNhap.MSSV);
                            dsKQDanhChoTuongDuong.Add(KQTemp);
                            if (KQTemp != null)
                            {
                                if (monHocTuongDuongRepos.KiemTraMonHocTuongDuong(chiTietKhoi.MonHocID))
                                {
                                    var dsMHTuongDuong = MonHocTuongDuongRepository.LayMonHocTuongDuong(chiTietKhoi.MonHocID);
                                    foreach (var tuongduongItem in dsMHTuongDuong)
                                    {
                                        dsKQDanhChoTuongDuong.Add(ketQuaHocRepos.LayKetQuaHocTapCaoNhatTheoSVMonHoc(tuongduongItem.MonHocID, SVDangNhap.MSSV));
                                    }
                                    KQTemp = ketQuaHocRepos.LayKetQuaCaoNhat(dsKQDanhChoTuongDuong);
                                }
                                dsKetQuaTheoKhoi.Add(KQTemp);
                                dsMonHocCungKhoi.Add(chiTietKhoi.MonHocID);
                            }
                            else
                            {
                                if (monHocTuongDuongRepos.KiemTraMonHocTuongDuong(chiTietKhoi.MonHocID))
                                {
                                    foreach (var tuongduongItem in MonHocTuongDuongRepository.LayMonHocTuongDuong(chiTietKhoi.MonHocID))
                                    {
                                        KQTemp = ketQuaHocRepos.LayKetQuaHocTapCaoNhatTheoSVMonHoc(tuongduongItem.MonHocIDTuongDuong, SVDangNhap.MSSV);
                                        if (KQTemp != null)
                                        {
                                            dsKetQuaTheoKhoi.Add(KQTemp);
                                            dsMonHocCungKhoi.Add(chiTietKhoi.MonHocID);
                                        }
                                    }
                                }
                            }
                        }
                        var dsKQSVDaTungHoc = ketQuaHocRepos.LayTatCaKetQuaMonDaHocKhongTrungCuaSinhVien(SVDangNhap);

                        //dtb theo khoi cua sv dang xet
                        float dtbTheoKhoi = ketQuaHocRepos.TinhDTBTichLuyTheoDsMH(dsKetQuaTheoKhoi); //tinh dtb theo khoi cua mon 504008

                        float dtbtl = 0;
                        if (sv_TichLuyRepos.KiemTraSinhVienTichLuy(SVDangNhap.MSSV, SVDangNhap.Lop.NganhID, SVDangNhap.Lop.HeDaoTaoID, Publics.hocKyHienTai.HocKyID))
                        {
                            dtbtl = float.Parse(sv_TichLuyRepos.LaySinhVienTichLuy(SVDangNhap.MSSV, SVDangNhap.Lop.NganhID, SVDangNhap.Lop.HeDaoTaoID, Publics.hocKyHienTai.HocKyID).FirstOrDefault().TrungBinhTichLuy.Value.ToString());
                        }
                        else
                        {
                            dtbtl = ketQuaHocRepos.TinhDTBTichLuy(SVDangNhap, SVDangNhap.Lop.NganhID, SVDangNhap.Lop.HeDaoTaoID);
                        }

                        //dtb sv khoa truoc do
                        //ds sv theo khoi mon hoc
                        // var dsSVTLTheoKhoi = svtlTheoKhoiRepos.LayDsSVTLTheoKhoi(dsKhoiTheoMonHoc.FirstOrDefault().KhoiChuongTrinhDaoTaoID, HocKyID);
                        //if (dsSVTLTheoKhoi == null || dsSVTLTheoKhoi.Count()==0)
                        //{
                        //ds sv truoc 1 khoa va cug khoa vs sv va co hoc mon 504008
                        List<KetQuaHoc> dssvTruocKhoa = ketQuaHocRepos.LayDSSVTheoKhoaVaMonHoc(SVDangNhap.Lop.HeDaoTaoID, SVDangNhap.Lop.NganhID, SVDangNhap.Lop.NienKhoaID.Value, id);

                        //tinh dtbkhoi cua cac sv co hoc mon 504008
                        foreach (var svItem in dssvTruocKhoa)
                        {



                            float dtbTheoKhoiSV = 0; //dtb theo khoi
                            float tinChiTheoKhoiSV = 0;
                            float dtbtlChungSV = 0; //dtbtl cac mh cua sv dang xet
                            float tinChiTLSV = 0;
                            foreach (var monHocItem in dsMonHocCungKhoi)
                            {
                                KetQuaHoc kqHoc = ketQuaHocRepos.LayKetQuaHocTapCaoNhatTheoSVMonHoc(monHocItem, svItem.MSSV);
                                if (kqHoc != null)
                                {
                                    tinChiTheoKhoiSV += kqHoc.MonHoc.SoDVHocTap.Value;
                                    dtbTheoKhoiSV += kqHoc.DTB.Value * kqHoc.MonHoc.SoDVHocTap.Value;
                                }
                            }
                            dtbTheoKhoiSV = dtbTheoKhoiSV / tinChiTheoKhoiSV;
                            int rotFlag = 0;
                            if (ketQuaHocRepos.LayKetQuaHocTapCaoNhatTheoSVMonHoc(id, svItem.MSSV).DTB.Value >= 5)
                                rotFlag = 1;
                            if (svtlTheoKhoiRepos.KiemTraTonTai(svItem.MSSV, dsKhoiTheoMonHoc.FirstOrDefault().KhoiChuongTrinhDaoTaoID, Publics.hocKyHienTai.HocKyID))
                            {
                                svtlTheoKhoiRepos.CapNhatDTBKhoiVaRotSinhVienTLKhoi(svItem.MSSV, dsKhoiTheoMonHoc.FirstOrDefault().KhoiChuongTrinhDaoTaoID, dtbTheoKhoiSV, Publics.hocKyHienTai.HocKyID, rotFlag);
                                continue;
                                //continue;
                            }

                            foreach (var monHocItem in dsKQSVDaTungHoc)
                            {
                                KetQuaHoc kqHoc = ketQuaHocRepos.LayKetQuaHocTapCaoNhatTheoSVMonHoc(monHocItem.MonHocID, svItem.MSSV);
                                if (kqHoc != null && kqHoc.DTB != null)
                                {
                                    tinChiTLSV += kqHoc.MonHoc.SoDVHocTap.Value;
                                    dtbtlChungSV += kqHoc.DTB.Value * kqHoc.MonHoc.SoDVHocTap.Value;
                                }
                            }
                            dtbtlChungSV = dtbtlChungSV / tinChiTLSV;

                            svtlTheoKhoiRepos.ThemSinhVienTLTheoKhoi(svItem.MSSV, dsKhoiTheoMonHoc.FirstOrDefault().KhoiChuongTrinhDaoTaoID, dtbTheoKhoiSV, Publics.hocKyHienTai.HocKyID, dtbtlChungSV, rotFlag);

                        }
                        DSSVTichLuyKhoiTheoMonHoc = svtlTheoKhoiRepos.LayDsSVTLTheoKhoi(dsKhoiTheoMonHoc.FirstOrDefault().KhoiChuongTrinhDaoTaoID, Publics.hocKyHienTai.HocKyID).ToList();
                        list.DTBTLTheoKhoiCuaSV = dtbTheoKhoi;
                        list.DTBTLChungCuaSV =  dtbtl;
                        #endregion
                    }
                    if (DSSVTichLuyKhoiTheoMonHoc.Count > 0)
                    {
                        foreach (var svtlItem in DSSVTichLuyKhoiTheoMonHoc)
                        {
                            table.Rows.Add(svtlItem.Rot.Value.ToString(), Math.Truncate(svtlItem.DTBTichLuyTheoKhoi.Value), Math.Truncate(svtlItem.DTBTichLuyTheoSVXet.Value));
                        }
                        Classifier classifier = new Classifier();
                        classifier.TrainClassifier(table);
                        float DTBTLTheoKhoi = list.DTBTLTheoKhoiCuaSV;
                        float DTBTLChung = list.DTBTLChungCuaSV;
                        string rot = classifier.Classify(new float[] { float.Parse(Math.Truncate(DTBTLTheoKhoi).ToString()), float.Parse(Math.Truncate(DTBTLChung).ToString()) });
                        string tenMH = new MonHocRepository().LayMonHocTheoMaMH(id).TenMonHoc;

                        DTBTLTheoKhoi = float.Parse( Math.Round(DTBTLTheoKhoi, 2).ToString());
                        DTBTLChung = float.Parse( Math.Round(DTBTLChung, 2).ToString());

                        if (int.Parse(rot) == 0)
                        {

                            rot = "<p style=\"color:lime\"><b>Thông báo:</b></p><br />Sinh viên <span style=\"color:lime\">" + SVDangNhap.MSSV + "</span> khó hoàn thành môn học \"" + tenMH + "\" vì sau khi thống kê, với:<br />   Điểm TBTL khối kiến thức có môn \"" + tenMH + "\" mà SV đang chọn là: <span style=\"color:lime\">" + DTBTLTheoKhoi + "</span><br />   Điểm TBTL chung của SV là: <span style=\"color:lime\">" + DTBTLChung + "</span><br /><br />Kết quả:<br />Những SV thoả các điều kiện trên, đa phần là <span style=\"color:lime\">rớt</span> môn học này!<br />Nếu đăng ký học thì sinh viên phải học thật nghiêm túc môn học này!";
                        }
                        else
                        {
                            rot = "<p style=\"color:lime\"><b>Thông báo:</b></p><br />Sinh viên <span style=\"color:lime\">" + SVDangNhap.MSSV + "</span> có thể hoàn thành môn học \"" + tenMH + "\" vì sau khi thống kê, với:<br />   Điểm TBTL khối kiến thức có môn \"" + tenMH + "\" mà SV đang chọn là: <span style=\"color:lime\">" + DTBTLTheoKhoi + "</span><br />   Điểm TBTL chung của SV là: <span style=\"color:lime\">" + DTBTLChung + "</span><br /><br />Kết quả:<br />Những SV thoả các điều kiện trên, đa phần là <span style=\"color:lime\">hoàn thành</span> môn học này!<br />Nếu đăng ký học thì sinh viên cũng không được lơ là môn học này!";
                        }
                        doKhoMonHoc = "$(document).ready(function showStickyErrorToast() { $().toastmessage('showToast', {text: ' " + rot + "',  sticky: true, position: 'middle-center', type: 'notice', closeText: '', close: function () {  console.log('');  } });});";
                    }
                    //return View();
                }
            }
            return RedirectToAction("Index");
        }


        public ActionResult HuyMonDangKy(string id)
        {
            if (Publics.sinhVienDangNhap == null)
                return RedirectToAction("Index", "TrangChu");
            string MSSV = Publics.sinhVienDangNhap.MSSV;
            int HocKyID = Publics.hocKyHienTai.HocKyID;
            if (sinhVienMonDuKienMoRepos.KiemTraSinhVienMonDuKienMo(MSSV, id, HocKyID))
            {
                sinhVienMonDuKienMoRepos.XoaSinhVienMonDuKienMo(MSSV, id, HocKyID);
            }
            //VuotToiDaKhiCongThem = false;

            return RedirectToAction("Index");
        }
    }
}
